% O sea.. algo en el mundo, esfera o guerrero.
objeto( O ) :-	esta( _, O ).

nombreGuerrero( monstruo(N,_), N ).
nombreGuerrero( saiyajin(N,_), N ).
nombreGuerrero( terricola(N), N ).

% Para functores
esGuerreroFunc( F ) :- nombreGuerrero( F, _ ).
% Para atomos
esGuerrero( G ):- nombreGuerrero( F, G ), esta( _, F ).

% Para functores
esMonstruo( monstruo(_,_) ).
esSaiyajin( saiyajin(_,_) ).
esTerricola( terricola(_) ).


ruido( saiyajin(_,_), 10 ).
ruido( monstruo(_,R), R ).
ruido( terricola(_), 0 ).
ruido( esfera(E), R ) :- R is E*3.

loRodean( G, Ps ) :-
	posicionGuerrero( G, P ),
	limitrofe( P, Ps ).

estaRodeado( G ) :- 
	esGuerrero( G ),
	forall( 
		loRodean( G, Ps ),
		posicionComprometida( G, Ps )
	).

estaASalvo( G ) :- esGuerrero( G ), not( estaEnPeligro(G) ).
		
guerreroFeliz( G ) :-
	esGuerrero( G ),
	estaASalvo(G),
	forall( aliados(G,A) , estaASalvo(A) ).
	
puedePasar( G, Pos ) :-
	esGuerrero( G ),
	esPosicion( Pos ),
	transporte( T, G ),
	tipoDeTerreno( Pos, Tipo ),
	sirvePara( T, Tipo ).

% Para el 11

algunoPuedeLlegar( G, Pos ) :- puedeLlegar( G, Pos ).
algunoPuedeLlegar( G, Pos ) :- aliados( G, A ), puedeLlegar( A, Pos ).